home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / mui / bcc_src.lha / Parser / BCC_BUG next >
Internet Message Format  |  1998-01-13  |  19KB

  1. From mkalline@cc.hut.fi  Mon Jan 12 17:57:44 1998
  2. Received: from vipunen.hut.fi by cerber.ii.tuniv.szczecin.pl via ESMTP (940816.SGI.8.6.9/940406.SGI)
  3.     for <cret@cerber.ii.tuniv.szczecin.pl> id RAA12008; Mon, 12 Jan 1998 17:56:55 +0100
  4. Received: from cc.hut.fi (mkalline@cc-dialin1-18.hut.fi [130.233.251.18])
  5.     by vipunen.hut.fi (8.8.8/8.8.7) with SMTP id RAA120010
  6.     for <cret@cerber.ii.tuniv.szczecin.pl>; Mon, 12 Jan 1998 17:54:22 +0200
  7. From: Mikko Kallinen <mkalline@cc.hut.fi>
  8. To: Rafal Mantiuk <cret>
  9. Date: Mon, 12 Jan 1998 17:43:00 +0200
  10. Message-ID: <yam7316.20.2017292592@pop.hut.fi>
  11. In-Reply-To: <34B9E439.41C6@cerber.ii.tuniv.szczecin.pl>
  12. X-Mailer: YAM 1.3.4 [020] - Amiga Mailer by Marcel Beck
  13. Subject: Re: BCC
  14. MIME-Version: 1.0
  15. Content-type: multipart/mixed; boundary="BOUNDARY.7316.21.2017292592.1"
  16.  
  17. Warning: This is a message in MIME format. Your mail reader does not
  18. support MIME. Some parts of this message will be readable as plain text.
  19. To see the rest, you will need to upgrade your mail reader.
  20.  
  21. This message was composed on an Amiga using the YAM mailer.
  22. YAM is available at http://bitcom.ch/~mbeck/
  23.  
  24. --BOUNDARY.7316.21.2017292592.1
  25. Content-Type: text/plain
  26.  
  27. On 12-Jan-98, Rafal Mantiuk wrote:
  28.  
  29. > I can not help much if I don't have an example of .bc source that 
  30. > hangs the program. So, if you could send me the .bc that coused the
  31. > problem I'll look into the code and try to fix it.
  32.  
  33. Okay. I tested BCC after receiving your reply with both Mungwall and
  34. Enforcer running. The program didn't crash and it produced C code that
  35. compiled and ran perfectly well. I'll include the Mainwin.bc and also
  36. the .bh files that were scanned.
  37.  
  38. The Enforcer output seems to have only byte-writes to 00000000, but
  39. sometimes there are also long-reads from 002?????, an address which is
  40. just above the end of chip memory and where I don't have any kind of
  41. memory at all.
  42.  
  43. BTW the program I'm developing is a 3D object modeler :)
  44.  
  45. This is what was printed in the CLI
  46. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  47. BCC precompiler v3.3
  48.  
  49. Translating "Mainwin.bc" into "Mainwin.c"
  50. Scanning "App.bh"
  51. Scanning "Mainwin.bh"
  52. Scanning "View.bh"
  53.  
  54. This is what Enforcer printed
  55. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  56. BYTE-WRITE to  00000000        data=00         PC: 78443DC2
  57. USP:  7836F7EC SR: 0004 SW: 0711  (U0)(-)(-)  TCB: 78081B68
  58. Data: 783DDAFE 783DDAFE 00000001 78130000 00000000 1E091BC5 1E01B43D 7843E524
  59. Addr: 783DB8E8 00000000 783DDA4C 783DDAFE 782A2730 7836F8CA 783DB8E8 --------
  60. Stck: 00000000 78130000 7836F8F0 783DCDA4 783DDA4C 7843FBF0 783DDA4C 7836F84C
  61. Stck: 783DB8E8 0001783D CDA40000 000000FF 781379E4 0000000B 7836F8F0 7836F9F6
  62. Name: "Shell Process"  CLI: "bcc"  Hunk 0000 Offset 0000589A
  63.  
  64. BYTE-WRITE to  00000000        data=00         PC: 78443DC2
  65. USP:  7836F7EC SR: 0004 SW: 0711  (U0)(-)(-)  TCB: 78081B68
  66. Data: 783DE9CE 783DE9CE 00000001 78130000 00000000 1E091BC5 1E01B43D 7843E524
  67. Addr: 783DE472 00000000 783DE91C 783DE9CE 782A2730 7836F8CA 783DE472 --------
  68. Stck: 00000000 781379E4 7836F8F0 783DE57C 783DE91C 7843FBF0 783DE91C 7836F84C
  69. Stck: 783DE472 0001783D E57C0000 000000FF 781379E4 0000000B 7836F8F0 7836F9F6
  70. Name: "Shell Process"  CLI: "bcc"  Hunk 0000 Offset 0000589A
  71.  
  72. BYTE-WRITE to  00000000        data=00         PC: 78443DC2
  73. USP:  7836F7EC SR: 0004 SW: 0711  (U0)(-)(-)  TCB: 78081B68
  74. Data: 783DEAEE 783DEAEE 00000003 78130000 00000000 1E091BC5 1E01B43D 7843E524
  75. Addr: 783DE482 00000000 783DEA3C 783DEAEE 782A2730 7836F8CA 783DE482 --------
  76. Stck: 00000000 781379E4 7836F8F0 783DE57C 783DEA3C 7843FBF0 783DEA3C 7836F84C
  77. Stck: 783DE482 0003783D E57C0000 000000FF 781379E4 0000000B 7836F8F0 7836F9F6
  78. Name: "Shell Process"  CLI: "bcc"  Hunk 0000 Offset 0000589A
  79.  
  80. BYTE-WRITE to  00000000        data=00         PC: 78443DC2
  81. USP:  7836F7EC SR: 0004 SW: 0711  (U0)(-)(-)  TCB: 78081B68
  82. Data: 783DEC0E 783DEC0E 00000003 78130000 00000000 1E091BC5 1E01B43D 7843E524
  83. Addr: 783DE494 00000000 783DEB5C 783DEC0E 782A2730 7836F8CA 783DE494 --------
  84. Stck: 00000000 781379E4 7836F8F0 783DE57C 783DEB5C 7843FBF0 783DEB5C 7836F84C
  85. Stck: 783DE494 0003783D E57C0000 000000FF 781379E4 0000000B 7836F8F0 7836F9F6
  86. Name: "Shell Process"  CLI: "bcc"  Hunk 0000 Offset 0000589A
  87.  
  88. BYTE-WRITE to  00000000        data=00         PC: 78443DC2
  89. USP:  7836F7EC SR: 0004 SW: 0711  (U0)(-)(-)  TCB: 78081B68
  90. Data: 783DED2E 783DED2E 00000003 78130000 00000000 1E091BC5 1E01B43D 7843E524
  91. Addr: 783DE4A6 00000000 783DEC7C 783DED2E 782A2730 7836F8CA 783DE4A6 --------
  92. Stck: 00000000 781379E4 7836F8F0 783DE57C 783DEC7C 7843FBF0 783DEC7C 7836F84C
  93. Stck: 783DE4A6 0003783D E57C0000 000000FF 781379E4 0000000B 7836F8F0 7836F9F6
  94. Name: "Shell Process"  CLI: "bcc"  Hunk 0000 Offset 0000589A
  95.  
  96. BYTE-WRITE to  00000000        data=00         PC: 78443DC2
  97. USP:  7836F7EC SR: 0004 SW: 0711  (U0)(-)(-)  TCB: 78081B68
  98. Data: 783DEE4E 783DEE4E 00000003 78130000 00000000 1E091BC5 1E01B43D 7843E524
  99. Addr: 783DE4BB 00000000 783DED9C 783DEE4E 782A2730 7836F8CA 783DE4BB --------
  100. Stck: 00000000 781379E4 7836F8F0 783DE57C 783DED9C 7843FBF0 783DED9C 7836F84C
  101. Stck: 783DE4BB 0003783D E57C0000 000000FF 781379E4 0000000B 7836F8F0 7836F9F6
  102. Name: "Shell Process"  CLI: "bcc"  Hunk 0000 Offset 0000589A
  103.  
  104. BYTE-WRITE to  00000000        data=00         PC: 78443DC2
  105. USP:  7836F7EC SR: 0004 SW: 0711  (U0)(-)(-)  TCB: 78081B68
  106. Data: 783DEF6E 783DEF6E 00000003 78130000 00000000 1E091BC5 1E01B43D 7843E524
  107. Addr: 783DE4D4 00000000 783DEEBC 783DEF6E 782A2730 7836F8CA 783DE4D4 --------
  108. Stck: 00000000 781379E4 7836F8F0 783DE57C 783DEEBC 7843FBF0 783DEEBC 7836F84C
  109. Stck: 783DE4D4 0003783D E57C0000 000000FF 781379E4 0000000B 7836F8F0 7836F9F6
  110. Name: "Shell Process"  CLI: "bcc"  Hunk 0000 Offset 0000589A
  111.  
  112. BYTE-WRITE to  00000000        data=00         PC: 78443DC2
  113. USP:  7836F7EC SR: 0004 SW: 0711  (U0)(-)(-)  TCB: 78081B68
  114. Data: 783DF08E 783DF08E 00000003 78130000 00000000 1E091BC5 1E01B43D 7843E524
  115. Addr: 783DE4EA 00000000 783DEFDC 783DF08E 782A2730 7836F8CA 783DE4EA --------
  116. Stck: 00000000 781379E4 7836F8F0 783DE57C 783DEFDC 7843FBF0 783DEFDC 7836F84C
  117. Stck: 783DE4EA 0003783D E57C0000 000000FF 781379E4 0000000B 7836F8F0 7836F9F6
  118. Name: "Shell Process"  CLI: "bcc"  Hunk 0000 Offset 0000589A
  119.  
  120. --BOUNDARY.7316.21.2017292592.1
  121. Content-Type: text/plain; charset=iso-8859-1; name="Mainwin.bc"
  122. Content-Transfer-Encoding: quoted-printable
  123.  
  124. #include <math.h>
  125. #include <proto/exec.h>
  126. #include <proto/intuition.h>
  127. #include <proto/dos.h>
  128. #include <proto/asl.h>
  129. #include <dos/dos.h>
  130. #include <libraries/asl.h>
  131. #include <intuition/intuition.h>
  132.  
  133. #include "global.h"
  134. #include "model.h"
  135. #include "load.h"
  136. #include "App.bh"
  137. #include "Mainwin.bh"
  138. #include "View.bh"
  139.  
  140. #define fract(n)    (n - floor(n))
  141.  
  142. static __saveds __asm void IntuiMsgFunc(register __a1 struct IntuiMessage=
  143.  *,register __a2 struct FileRequester *);
  144. static char *getfilename(Object *,char *,char *,char *,char);
  145.  
  146. cleardata Method Mainwin::Mainwin():
  147.     MUIA_Window_Title,    "Geotto",
  148.     MUIA_Window_ID,        MAKE_ID('M','A','I','N'),
  149.     MUIA_Window_NeedsMouseObject, TRUE,
  150. /*
  151.     MUIA_Window_CloseGadget, FALSE,
  152.     MUIA_Window_DepthGadget, FALSE,
  153.     MUIA_Window_DragBar, FALSE,
  154.     MUIA_Window_Backdrop, TRUE,
  155.     MUIA_Window_Borderless, TRUE,
  156. */
  157.     WindowContents, VGroup,
  158.         Child, HGroup,
  159.             Child, VGroup,
  160.                 MUIA_Weight, 0,
  161.                 Child, SimpleButton("About"),
  162.                 Child, newobj =3D KeyButton("New",'n'),
  163.                 Child, TextObject,
  164.                     MUIA_Text_Contents, "Fetch",
  165.                     End,
  166.                 Child, loadobj =3D KeyButton("Load",'l'),
  167.                 Child, KeyButton("Save",'s'),
  168.                 Child, KeyButton("Save As",'s'),
  169.                 Child, TextObject,
  170.                     MUIA_Text_Contents, "Zoom",
  171.                     End,
  172.                 Child, zoomin =3D KeyButton("In",'+'),
  173.                 Child, zoomout =3D KeyButton("Out",'-'),
  174.                 Child, HVSpace,
  175.                 Child, VGroup,
  176.                     TextFrame,
  177.                     MUIA_Background, MUII_TextBack,
  178.                     Child, xcoordtxt =3D TextObject, End,
  179.                     Child, ycoordtxt =3D TextObject, End,
  180.                     Child, zcoordtxt =3D TextObject, End,
  181.                     End,
  182.                 End,
  183.             Child, viewgr =3D ColGroup(2),
  184.                 MUIA_Group_HorizSpacing, 1,
  185.                 MUIA_Group_VertSpacing, 1,
  186.                 Child, view1 =3D ViewObject,
  187.                     VirtualFrame,
  188.                     MUIA_View_Mode, MUIV_View_Mode_Top,
  189.                     MUIA_View_X, f2l(0.0),
  190.                     MUIA_View_Y, f2l(0.0),
  191.                     MUIA_View_Z, f2l(0.0),
  192.                     MUIA_View_Zoom, f2l(0.1),
  193.                     MUIA_View_GridSize, f2l(1.0),
  194.                     End,
  195.                 Child, view2 =3D ViewObject,
  196.                     VirtualFrame,
  197.                     MUIA_View_Mode, MUIV_View_Mode_Persp,
  198.                     MUIA_View_X, f2l(0.0),
  199.                     MUIA_View_Y, f2l(0.0),
  200.                     MUIA_View_Z, f2l(0.0),
  201.                     MUIA_View_Zoom, f2l(0.1),
  202.                     MUIA_View_GridSize, f2l(1.0),
  203.                     End,
  204.                 Child, view3 =3D ViewObject,
  205.                     VirtualFrame,
  206.                     MUIA_View_Mode, MUIV_View_Mode_Face,
  207.                     MUIA_View_X, f2l(0.0),
  208.                     MUIA_View_Y, f2l(0.0),
  209.                     MUIA_View_Z, f2l(0.0),
  210.                     MUIA_View_Zoom, f2l(0.1),
  211.                     MUIA_View_GridSize, f2l(1.0),
  212.                     End,
  213.                 Child, view4 =3D ViewObject,
  214.                     VirtualFrame,
  215.                     MUIA_View_Mode, MUIV_View_Mode_Left,
  216.                     MUIA_View_X, f2l(0.0),
  217.                     MUIA_View_Y, f2l(0.0),
  218.                     MUIA_View_Z, f2l(0.0),
  219.                     MUIA_View_Zoom, f2l(0.1),
  220.                     MUIA_View_GridSize, f2l(1.0),
  221.                     End,
  222.                 End,
  223.             End,
  224.         Child, HGroup,
  225.             Child, gridsizetxt =3D TextObject,
  226.                 TextFrame,
  227.                 MUIA_Background, MUII_TextBack,
  228.                 MUIA_Text_Contents, "Grid:",
  229.                 End,
  230.             Child, poks =3D SimpleButton("MUI Settings..."),
  231.             End,
  232.         End
  233. {
  234.     obj->Zoom =3D 0.1;
  235.  
  236.     poks->_Notify(MUIA_Pressed,FALSE,MUIV_Notify_Application,2,MUIM_Applicat=
  237. ion_OpenConfigWindow,0);
  238.  
  239.     newobj->_Notify(MUIA_Pressed,FALSE,obj,1,MUIM_Mainwin_New);
  240.     loadobj->_Notify(MUIA_Pressed,FALSE,obj,1,MUIM_Mainwin_Load);
  241.  
  242.     zoomin->_Notify(MUIA_Pressed,FALSE,obj,1,MUIM_Mainwin_ZoomIn);
  243.     zoomout->_Notify(MUIA_Pressed,FALSE,obj,1,MUIM_Mainwin_ZoomOut);
  244.  
  245.     ehnode.ehn_Priority =3D 0;
  246.     ehnode.ehn_Flags =3D 0;
  247.     ehnode.ehn_Object =3D obj;
  248.     ehnode.ehn_Class =3D NULL;
  249.     ehnode.ehn_Events =3D IDCMP_RAWKEY | IDCMP_MOUSEMOVE;
  250.  
  251.     obj->Window_AddEventHandler(&ehnode);
  252.  
  253.     objreq =3D MUI_AllocAslRequestTags(ASL_FileRequest,
  254.         ASLFR_InitialDrawer,    "3D:",
  255.         ASLFR_InitialPattern,    "#?.(lwo|img)",
  256.         ASLFR_DoPatterns,        TRUE,
  257.         ASLFR_RejectIcons,        TRUE,
  258.         TAG_DONE);
  259.  
  260.     Model =3D AllocModel();
  261.  
  262. /*    {
  263.     vertex_t *v[8];
  264.     polygon_t *p;
  265.  
  266.     v[0] =3D AddVertex(Model);    v[0]->x =3D -1.0;    v[0]->y =3D 1.0;        v[0]->z =3D=
  267.  1.0;
  268.     v[1] =3D AddVertex(Model);    v[1]->x =3D 1.0;    v[1]->y =3D 1.0;        v[1]->z =3D=
  269.  1.0;
  270.     v[2] =3D AddVertex(Model);    v[2]->x =3D -1.0;    v[2]->y =3D -1.0;        v[2]->z =
  271. =3D 1.0;
  272.     v[3] =3D AddVertex(Model);    v[3]->x =3D 1.0;    v[3]->y =3D -1.0;        v[3]->z =3D=
  273.  1.0;
  274.     v[4] =3D AddVertex(Model);    v[4]->x =3D -1.0;    v[4]->y =3D 1.0;        v[4]->z =3D=
  275.  -1.0;
  276.     v[5] =3D AddVertex(Model);    v[5]->x =3D 1.0;    v[5]->y =3D 1.0;        v[5]->z =3D=
  277.  -1.0;
  278.     v[6] =3D AddVertex(Model);    v[6]->x =3D -1.0;    v[6]->y =3D -1.0;        v[6]->z =
  279. =3D -1.0;
  280.     v[7] =3D AddVertex(Model);    v[7]->x =3D 1.0;    v[7]->y =3D -1.0;        v[7]->z =3D=
  281.  -1.0;
  282.  
  283.     p =3D AddPolygon(Model); AddPolyvert(p,v[0]); AddPolyvert(p,v[1]); AddPo=
  284. lyvert(p,v[3]); AddPolyvert(p,v[2]);
  285.     p =3D AddPolygon(Model); AddPolyvert(p,v[4]); AddPolyvert(p,v[5]); AddPo=
  286. lyvert(p,v[7]); AddPolyvert(p,v[6]);
  287.     p =3D AddPolygon(Model); AddPolyvert(p,v[0]); AddPolyvert(p,v[1]); AddPo=
  288. lyvert(p,v[5]); AddPolyvert(p,v[4]);
  289.     p =3D AddPolygon(Model); AddPolyvert(p,v[2]); AddPolyvert(p,v[3]); AddPo=
  290. lyvert(p,v[7]); AddPolyvert(p,v[6]);
  291.     }
  292. */
  293.     //LoadModel("CC:Lambda/orig/freighter.lwo",Model);
  294.     //LoadModel("CC:Lambda/orig/mfighter2.img",Model);
  295.  
  296.     viewgr->View_Model =3D Model;
  297. }
  298.  
  299. super Method Mainwin::OM_DISPOSE()
  300. {
  301.     obj->Window_RemEventHandler(&ehnode);
  302.     MUI_FreeAslRequest(objreq);
  303.  
  304.     FreeModel(Model);
  305. }
  306.  
  307. super Method Mainwin::MUIM_HandleEvent()
  308. {
  309.     Object *mouseobj =3D (Object *)obj->Window_MouseObject;
  310.  
  311.     if (msg->imsg)
  312.     {
  313.         if (mouseobj =3D=3D view1)
  314.         {
  315.             switch(msg->imsg->Class)
  316.             {
  317.                 case IDCMP_RAWKEY:
  318.                     switch(msg->imsg->Code)
  319.                     {
  320.                         case 76:
  321.                             viewgr->View_ScrollZPos();
  322.                             mreturn MUI_EventHandlerRC_Eat;
  323.                             break;
  324.                         case 77:
  325.                             viewgr->View_ScrollZNeg();
  326.                             mreturn MUI_EventHandlerRC_Eat;
  327.                             break;
  328.                         case 79:
  329.                             viewgr->View_ScrollXPos();
  330.                             mreturn MUI_EventHandlerRC_Eat;
  331.                             break;
  332.                         case 78:
  333.                             viewgr->View_ScrollXNeg();
  334.                             mreturn MUI_EventHandlerRC_Eat;
  335.                             break;
  336.                     }
  337.                     break;
  338.                 case IDCMP_MOUSEMOVE:
  339.                     xcoordtxt->Contents =3D "X 0.0 m";
  340.                     ycoordtxt->Contents =3D NULL;
  341.                     zcoordtxt->Contents =3D "Z 0.0 m";
  342.                     break;
  343.             }
  344.         }
  345.         else if (mouseobj =3D=3D view3)
  346.         {
  347.             switch(msg->imsg->Class)
  348.             {
  349.                 case IDCMP_RAWKEY:
  350.                     switch(msg->imsg->Code)
  351.                     {
  352.                         case 76:
  353.                             viewgr->View_ScrollYPos();
  354.                             mreturn MUI_EventHandlerRC_Eat;
  355.                             break;
  356.                         case 77:
  357.                             viewgr->View_ScrollYNeg();
  358.                             mreturn MUI_EventHandlerRC_Eat;
  359.                             break;
  360.                         case 79:
  361.                             viewgr->View_ScrollXPos();
  362.                             mreturn MUI_EventHandlerRC_Eat;
  363.                             break;
  364.                         case 78:
  365.                             viewgr->View_ScrollXNeg();
  366.                             mreturn MUI_EventHandlerRC_Eat;
  367.                             break;
  368.                     }
  369.                     break;
  370.                 case IDCMP_MOUSEMOVE:
  371.                     xcoordtxt->Contents =3D "X 0.0 m";
  372.                     ycoordtxt->Contents =3D "Y 0.0 m";
  373.                     zcoordtxt->Contents =3D NULL;
  374.                     break;
  375.             }
  376.         }
  377.         else if (mouseobj =3D=3D view4)
  378.         {
  379.             switch(msg->imsg->Class)
  380.             {
  381.                 case IDCMP_RAWKEY:
  382.                     switch(msg->imsg->Code)
  383.                     {
  384.                         case 76:
  385.                             viewgr->View_ScrollYPos();
  386.                             mreturn MUI_EventHandlerRC_Eat;
  387.                             break;
  388.                         case 77:
  389.                             viewgr->View_ScrollYNeg();
  390.                             mreturn MUI_EventHandlerRC_Eat;
  391.                             break;
  392.                         case 79:
  393.                             viewgr->View_ScrollZNeg();
  394.                             mreturn MUI_EventHandlerRC_Eat;
  395.                             break;
  396.                         case 78:
  397.                             viewgr->View_ScrollZPos();
  398.                             mreturn MUI_EventHandlerRC_Eat;
  399.                             break;
  400.                     }
  401.                     break;
  402.                 case IDCMP_MOUSEMOVE:
  403.                     xcoordtxt->Contents =3D NULL;
  404.                     ycoordtxt->Contents =3D "Y 0.0 m";
  405.                     zcoordtxt->Contents =3D "Z 0.0 m";
  406.                     break;
  407.             }
  408.         }
  409.         else
  410.         {
  411.             if (msg->imsg->Class =3D=3D IDCMP_MOUSEMOVE)
  412.             {
  413.                 xcoordtxt->Contents =3D NULL;
  414.                 ycoordtxt->Contents =3D NULL;
  415.                 zcoordtxt->Contents =3D NULL;
  416.             }
  417.         }
  418.     }
  419.  
  420.     mreturn 0;
  421. }
  422.  
  423. Method Mainwin::New()
  424. {
  425.     RemAllVertices(Model);
  426.     MUI_Redraw(viewgr,MADF_DRAWOBJECT);
  427. }
  428.  
  429. static __saveds __asm void IntuiMsgFunc(register __a1 struct IntuiMessage=
  430.  *imsg,register __a2 struct FileRequester *req)
  431. {
  432.     if (imsg->Class =3D=3D IDCMP_REFRESHWINDOW)
  433.         DoMethod(req->fr_UserData,MUIM_Application_CheckRefresh);
  434. }
  435.  
  436. Method Mainwin::Load()
  437. {
  438.     static char buf[512];
  439.     static const struct Hook IntuiMsgHook =3D { { 0,0 },(void *)IntuiMsgFunc=
  440. ,NULL,NULL };
  441.     Object *app =3D (Object *)obj->_ApplicationObject;
  442.  
  443.     set(app,MUIA_Application_Sleep,TRUE);
  444.     if (MUI_AslRequestTags(objreq,
  445.         ASLFR_Window,        obj->Window_Window,
  446.         ASLFR_TitleText,    "Load an object",
  447.         ASLFR_DoSaveMode,    FALSE,
  448.         ASLFR_UserData,        app,
  449.         ASLFR_IntuiMsgFunc,    &IntuiMsgHook,
  450.         TAG_DONE,0))
  451.     {
  452.         if (*objreq->fr_File)
  453.         {
  454.             stccpy(buf,objreq->fr_Drawer,sizeof(buf));
  455.             AddPart(buf,objreq->fr_File,sizeof(buf));
  456.  
  457.             LoadModel(buf,Model);
  458.             MUI_Redraw(viewgr,MADF_DRAWOBJECT);
  459.         }
  460.     }
  461.     set(app,MUIA_Application_Sleep,FALSE);
  462. }
  463.  
  464. static char *getfilename(Object *win,char *title,char *dir,char *pattern,=
  465. char save)
  466. {
  467.     static char buf[512];
  468.     struct FileRequester *req;
  469.     struct Window *w;
  470.     static long left=3D-1,top=3D-1,width=3D-1,height=3D-1;
  471.     Object *app =3D (Object *)BCC_XGet(win,MUIA_ApplicationObject);
  472.     char *res =3D NULL;
  473.     static const struct Hook IntuiMsgHook =3D { { 0,0 },(VOID *)IntuiMsgFunc=
  474. ,NULL,NULL };
  475.  
  476.     get(win,MUIA_Window_Window,&w);
  477.     if (left=3D=3D-1)
  478.     {
  479.         left   =3D w->LeftEdge+w->BorderLeft+2;
  480.         top    =3D w->TopEdge+w->BorderTop+2;
  481.         width  =3D w->Width-w->BorderLeft-w->BorderRight-4;
  482.         height =3D w->Height-w->BorderTop-w->BorderBottom-4;
  483.     }
  484.  
  485.     if (req=3DMUI_AllocAslRequestTags(ASL_FileRequest,
  486.         ASLFR_Window, w,
  487.         ASLFR_TitleText, title,
  488.         ASLFR_InitialLeftEdge, left,
  489.         ASLFR_InitialTopEdge , top,
  490.         ASLFR_InitialWidth   , width,
  491.         ASLFR_InitialHeight  , height,
  492.         ASLFR_InitialDrawer  , dir,
  493.         ASLFR_InitialPattern , pattern,
  494.         ASLFR_DoSaveMode     , save,
  495.         ASLFR_DoPatterns     , TRUE,
  496.         ASLFR_RejectIcons    , TRUE,
  497.         ASLFR_UserData       , app,
  498.         ASLFR_IntuiMsgFunc   , &IntuiMsgHook,
  499.         TAG_DONE))
  500.     {
  501.         set(app,MUIA_Application_Sleep,TRUE);
  502.         if (MUI_AslRequestTags(req,TAG_DONE))
  503.         {
  504.             if (*req->fr_File)
  505.             {
  506.                 res =3D buf;
  507.                 stccpy(buf,req->fr_Drawer,sizeof(buf));
  508.                 AddPart(buf,req->fr_File,sizeof(buf));
  509.             }
  510.             left   =3D req->fr_LeftEdge;
  511.             top    =3D req->fr_TopEdge;
  512.             width  =3D req->fr_Width;
  513.             height =3D req->fr_Height;
  514.         }
  515.         MUI_FreeAslRequest(req);
  516.         set(app,MUIA_Application_Sleep,FALSE);
  517.     }
  518.     return(res);
  519. }
  520.  
  521. Method Mainwin::ZoomIn()
  522. {
  523.     obj->Zoom =3D f2l(Zoom * 1.25);
  524. }
  525.  
  526. Method Mainwin::ZoomOut()
  527. {
  528.     obj->Zoom =3D f2l(Zoom /=A01.25);
  529. }
  530.  
  531. Attribute Mainwin::Zoom:S(long zoom)
  532. {
  533.     char buf[64];
  534.  
  535.     Zoom =3D l2f(zoom);
  536.  
  537.     GridSize =3D pow(10.0,floor(log10(0.1 / Zoom)));
  538.     if (fract(log10(1.0 /=A0Zoom)) > 0.699) GridSize *=3D 5.0;
  539.     else if (fract(log10(1.0 /=A0Zoom)) > 0.301) GridSize *=3D 2.0;
  540.  
  541.     if (GridSize >=3D 1000000.0)
  542.         sprintf(buf,"Grid: %d Mm",(long)(GridSize /=A01000000.0));
  543.     else if (GridSize >=3D 1000.0)
  544.         sprintf(buf,"Grid: %d km",(long)(GridSize /=A01000.0));
  545.     else if (GridSize >=3D 1.0)
  546.         sprintf(buf,"Grid: %d m",(long)GridSize);
  547.     else if (GridSize >=3D 0.01)
  548.         sprintf(buf,"Grid: %d cm",(long)(GridSize * 100.0));
  549.     else
  550.         sprintf(buf,"Grid: %d mm",(long)(GridSize * 1000.0));
  551.  
  552.     gridsizetxt->Contents =3D buf;
  553.  
  554.     viewgr->View_Zoom =3D f2l(Zoom);
  555.     viewgr->View_GridSize =3D f2l(GridSize);
  556.     MUI_Redraw(viewgr,MADF_DRAWOBJECT);
  557. }
  558.  
  559. --BOUNDARY.7316.21.2017292592.1
  560. Content-Type: text/plain; name="App.bh"
  561.  
  562. Class App:MUIC_Application
  563. {
  564.     MUI Class Window *mainwin;
  565. };
  566.  
  567. --BOUNDARY.7316.21.2017292592.1
  568. Content-Type: text/plain; name="Mainwin.bh"
  569.  
  570. Class Mainwin:MUIC_Window
  571. {
  572.     MUI Class Group *viewgr;
  573.     MUI Class View *view1,*view2,*view3,*view4;
  574.     MUI Class Area *newobj;
  575.     MUI Class Area *loadobj;
  576.     MUI Class Area *zoomin;
  577.     MUI Class Area *zoomout;
  578.     MUI Class Text *xcoordtxt,*ycoordtxt,*zcoordtxt;
  579.     MUI Class Text *gridsizetxt;
  580.     MUI Class Area *poks;
  581.  
  582.     struct MUI_EventHandlerNode ehnode;
  583.     struct FileRequester *objreq;
  584.  
  585.     model_t *Model;
  586.  
  587.     float Zoom,GridSize;
  588.  
  589.     Method New();
  590.     Method Load();
  591.     Method ZoomIn();
  592.     Method ZoomOut();
  593.  
  594.     Attribute Zoom:S;
  595. };
  596.  
  597. --BOUNDARY.7316.21.2017292592.1
  598. Content-Type: text/plain; name="View.bh"
  599.  
  600. #define MUIV_View_Mode_Face        0
  601. #define MUIV_View_Mode_Top        1
  602. #define MUIV_View_Mode_Left        2
  603. #define MUIV_View_Mode_Persp    3
  604.  
  605. Class View:MUIC_Area
  606. {
  607.     short Mode;
  608.     float X,Y,Z;
  609.     float Zoom,GridSize;
  610.     float FactorX,FactorY;
  611.     model_t *Model;
  612.  
  613.     Attribute Mode:I;
  614.     Attribute X:ISG;
  615.     Attribute Y:ISG;
  616.     Attribute Z:ISG;
  617.     Attribute Zoom:ISG;
  618.     Attribute GridSize:ISG;
  619.     Attribute Model:ISG;
  620.  
  621.     Method ScrollXPos();
  622.     Method ScrollXNeg();
  623.     Method ScrollYPos();
  624.     Method ScrollYNeg();
  625.     Method ScrollZPos();
  626.     Method ScrollZNeg();
  627. };
  628.  
  629. --BOUNDARY.7316.21.2017292592.1--
  630.  
  631.  
  632.